package com.run.spring.task;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * @description:
 * @project springboot_demo
 * @author HeWenWen
 * @date 2024-09-19 16:13
 * @version 1.0
 */
@Component
public class ScheduledTasks {

    // 每5秒执行一次
    @Scheduled(fixedRate = 5000)    /*表示任务从开始执行后每隔多长时间执行一次，单位是毫秒。任务开始时计时，不管上一次任务是否完成*/
    public void scheduleTaskWithFixedRate() {
        System.out.println("定时执行任务  Task with fixed rate - " + System.currentTimeMillis() / 1000 + "  " + new Date());
    }

    // 上一个任务完成后，延迟2秒再执行
    @Scheduled(fixedDelay = 10000)  /*表示任务在上一次执行完成后等待多久再执行，单位是毫秒。任务完成后计时*/
    public void scheduleTaskWithFixedDelay() {
        System.out.println("上一次执行完成后再定时执行任务  Task with fixed delay - " + System.currentTimeMillis() / 1000 + "  " + new Date());
    }

    // 使用cron表达式：每天10点执行
    @Scheduled(cron = "0 0 10 * * ?")   /*使用 Cron 表达式来控制任务的执行时间。Cron 表达式的格式为 秒 分 时 日 月 星期 年*/
    public void scheduleTaskWithCronExpression() {
        System.out.println("Task with cron expression - " + System.currentTimeMillis() / 1000 + "  " + new Date());
    }

}
